package ar.com.siglo21.taller.algoritmos.controlador;

import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

import ar.com.siglo21.taller.algoritmos.modelo.Equipo;
import ar.com.siglo21.taller.algoritmos.modelo.Torneo;

public class ControladorTorneo {

	private Torneo torneo;
	static Scanner sc = new Scanner(System.in);

	public void crearTorneo(String nombreTorneo, int cantidadEquipos,
			String categoria) {

		torneo = new Torneo(nombreTorneo, cantidadEquipos, categoria);

	}

	public Torneo getTorneo() {
		return torneo;
	}

	public void setTorneo(Torneo torneo) {
		this.torneo = torneo;
	}

	public void mostrarFixture() {
		for (Equipo equipo : getTorneo().getListaEquiposParticipantes()) {
			System.out.println("Los rivales de " + equipo.getNombre()
					+ " son: \n");
			for (Equipo equipoRival : equipo.getContrincantes()) {
				System.out.println(equipoRival.getNombre());
			}

		}

	}

	public void cargarResultados() {
		for (Equipo equipo : getTorneo().getListaEquiposParticipantes()) {
			for (Equipo equipoRival : equipo.getContrincantes()) {
				System.out.println("#####"+ equipo.getNombre().toUpperCase() + " Vs "+ equipoRival.getNombre().toUpperCase()+"#####");
				System.out.println("Goles " + equipo.getNombre() + ": ");
				int golEquipo = sc.nextInt();
				System.out.println("Goles " + equipoRival.getNombre() + ": ");
				int golEquipoRival = sc.nextInt();
				calcularResultadoPartido(equipo, equipoRival, golEquipo,
						golEquipoRival);
			}
			
		}

	}

	private void calcularResultadoPartido(Equipo equipo, Equipo equipoRival,
			int golEquipo, int golEquipoRival) {

		if (golEquipo > golEquipoRival) {
			equipo.setPuntos(equipo.getPuntos() + 3);

			setearGolesAFavorYEnContra(equipo, equipoRival, golEquipo,
					golEquipoRival);

		} else if (golEquipo < golEquipoRival) {
			equipoRival.setPuntos(equipoRival.getPuntos() + 3);

			setearGolesAFavorYEnContra(equipo, equipoRival, golEquipo,
					golEquipoRival);

		} else {
			equipo.setPuntos(equipo.getPuntos() + 1);
			equipoRival.setPuntos(equipoRival.getPuntos() + 1);

			setearGolesAFavorYEnContra(equipo, equipoRival, golEquipo,
					golEquipoRival);
		}
	}

	private void setearGolesAFavorYEnContra(Equipo equipo, Equipo equipoRival,
			int golEquipo, int golEquipoRival) {
		equipo.setGolesAFavor(equipo.getGolesAFavor() + golEquipo);
		equipo.setGolesEnContra(equipo.getGolesEnContra() + golEquipoRival);

		equipoRival.setGolesAFavor(equipoRival.getGolesAFavor()
				+ golEquipoRival);
		equipoRival
				.setGolesEnContra(equipoRival.getGolesEnContra() + golEquipo);
	}

	public void ordenarPosicionesDescenso() {
		Collections.sort(getTorneo().getListaEquiposParticipantes(),
				new MenorAMayorComparator());
		getTorneo().getListaEquiposParticipantes();
	}

	public void ordenarPosicionesAscescenso() {
		Collections.sort(getTorneo().getListaEquiposParticipantes(),
				new MayorAMenorComparator());
		getTorneo().getListaEquiposParticipantes();

	}

	class MenorAMayorComparator implements Comparator<Equipo> {
		@Override
		public int compare(Equipo o1, Equipo o2) {
			return o1.getPuntos() - o2.getPuntos();
		}
	}

	class MayorAMenorComparator implements Comparator<Equipo> {
		@Override
		public int compare(Equipo o1, Equipo o2) {
			return o2.getPuntos() - o1.getPuntos();
		}
	}

	public void listarTresMejores() {
		for (Equipo equipo : getTorneo().getListaEquiposParticipantes()) {
			System.out.println(equipo.toString());
		}

	}

	public void listarTresPeores() {
		for (Equipo equipo : getTorneo().getListaEquiposParticipantes()) {
			System.out.println(equipo.toString());
		}
		
	}
}
